home *** CD-ROM | disk | FTP | other *** search
/ The Business Master (3rd Edition) / The Business Master (3rd Edition).iso / files / spreotus / 123fin / loans.bas (.txt) < prev    next >
Encoding:
GW-BASIC  |  1985-03-30  |  15.5 KB  |  364 lines

  1. 10  ' LOAN ANALYZER  Copyright (c) 1983 Zyncon Inc.
  2. 20  DIM F(6,3),P$(5),PARSET(5),PARERR(6),TABLE1(60,3), TABLE2(60,5):KEY OFF:RESTORE
  3. 30  DATA 9,34,10,13,38,6,15,39,5,17,42,1,19,34,10,11,34,10
  4. 75  FALSE=0: TRUE=1
  5. 80  FOR I=1 TO 6 : READ F(I,1),F(I,2),F(I,3): NEXT I
  6. 92  GOSUB 30200
  7. 95  FOR I=1 TO 10 : KEY I,"": NEXT I: KEY OFF:WIDTH 80
  8. 97  ON ERROR GOTO 40000
  9. 100  ON KEY(1) GOSUB 12000: ON KEY(2) GOSUB 13000: ON KEY(3) GOSUB 13050: ON KEY(4) GOSUB 13080:ON KEY(5) GOSUB 13140:ON KEY(6) GOSUB 13170:ON KEY(7) GOSUB 13200
  10. 160  KEY(1) OFF:KEY(2) OFF:KEY(3) OFF:KEY(4) OFF:KEY(5) OFF:KEY(6) OFF:KEY(7) OFF
  11. 1000  '
  12. 1005  GOSUB 10000
  13. 1010  GOSUB 9000
  14. 1020  GOSUB 8000
  15. 1030  GOSUB 6000
  16. 1040  GOSUB 4000
  17. 1050  GOSUB 7000
  18. 1200  '
  19. 1210  KEY(1) ON:KEY(2) ON: KEY(6) ON
  20. 1230  T$=INKEY$
  21. 1235  LOCATE 19,75 : PRINT "W";: LOCATE 19,75: GOSUB 5240
  22. 1240  IF T$="" OR LEN(T$)=2 THEN 1230
  23. 1250  IF T$=CHR$(13) THEN KEY(1) OFF: KEY(2) OFF:LOCATE 22,1: PRINT SPC(79);:LOCATE 19,75: PRINT " ";:GOTO 1040
  24. 4000  '
  25. 4005  SOUND 1046.5,1:PARLINE=1
  26. 4040  GOSUB 30140: GOSUB 5000
  27. 4050  IF F$="" THEN 4070
  28. 4060  P$(PARLINE)=F$: GOTO 4085
  29. 4070  LOCATE F(PARLINE,1),F(PARLINE,2):PRINT TEMP$;
  30. 4085  IF PARLINE=1 THEN GOSUB 9300
  31. 4090  PARLINE = PARLINE+1:SOUND 1046.5,1
  32. 4110  IF PARLINE=6 THEN RETURN
  33. 4120  GOTO 4040
  34. 5000  '
  35. 5010  F$="":ROW= F(PARLINE,1) : BC= F(PARLINE,2): FL= F(PARLINE,3): FP= BC:
  36. 5040  LOCATE ROW,FP
  37. 5050  GOSUB 5240
  38. 5060  T$= INKEY$
  39. 5070  IF T$="" OR LEN(T$)=2 THEN 5050
  40. 5080  IF ASC(T$)= 13 THEN 5220
  41. 5090  IF ASC(T$)=8 THEN 5160
  42. 5100  IF FP=BC+FL THEN 5040
  43. 5110  PRINT T$;: F$=F$+T$
  44. 5130  IF FP=BC THEN PRINT SPC(FL-1);
  45. 5140  FP=FP+1:GOTO 5040
  46. 5160  IF FP=BC THEN 5040
  47. 5170  IF FP=BC+1 THEN F$="": PRINT " "; : FP=BC: GOTO 5040
  48. 5180  PRINT " ";:FP=FP-1
  49. 5200  -5300
  50. 5220  PRINT " ";
  51. 5230  RETURN
  52. 5235  REM ***** CURSOR GENERATION *****
  53. 5240  Y= CSRLIN:X= POS(0):IF Y=YL AND X=XL THEN 5280
  54. 5270  C= SCREEN(Y,X):
  55. 5280  PRINT CHR$(C);:LOCATE Y,X:PRINT CHR$(95);:LOCATE Y,X:XL=X:YL=Y
  56. 5330  RETURN
  57. 6000  LOCATE 7,1
  58. 6005  PRINT STRING$(80,95):LOCATE F(1,1),1: PRINT "(1)          Amount to Borrow: $ ";:LOCATE F(1,1),F(1,2): PRINT SPC(F(1,3));:LOCATE F(1,1),F(1,2) :PRINT USING "#######.##";VAL( P$(1));
  59. 6025  LOCATE 11,9: PRINT "Final Balloon Payment: $ ";: PRINT USING "#######.##";FBALL;
  60. 6030  LOCATE F(2,1),1: PRINT "(2)      Annual Interest Rate: ";:LOCATE F(2,1),F(2,2):PRINT SPC(F(2,3));: LOCATE F(2,1),F(2,2): PRINT USING "##.###";VAL(P$(2));: LOCATE F(2,1),46: PRINT "%";
  61. 6050  LOCATE F(3,1),1: PRINT "(3)     Duration of Borrowing: ";:LOCATE F(3,1),F(3,2): PRINT SPC(F(3,3));: LOCATE F(3,1),F(3,2):PRINT P$(3);: LOCATE F(3,1),46 : PRINT "YY,MM";
  62. 6070  LOCATE F(4,1),13: PRINT "Payment Frequency: ";:LOCATE F(4,1),F(4,2):PRINT SPC(F(4,3));: LOCATE F(4,1),F(4,2): PRINT P$(4);: LOCATE F(4,1),46: PRINT "(Monthly, Quarterly, Yearly)";
  63. 6082  LOCATE F(5,1),1: PRINT "(4)        Payment per Period: $ ";: LOCATE F(5,1),F(5,2): PRINT SPC(F(5,3));: LOCATE F(5,1),F(5,2) :PRINT USING "#######.##";VAL(P$(5));
  64. 6110  LOCATE 21,1:PRINT "Please fill in 3 of 4 key parameters above."
  65. 6125  LOCATE 24,1:PRINT "F1 to calculate, F2 to clear, F6 to quit.";
  66. 6130  RETURN
  67. 7000  REM CHECK PARAMETERS ROUTINE
  68. 7010  FOR I=1 TO 6 : PARERR(I)=0: NEXT I
  69. 7015  FOR I=1 TO 5:PARSET(I)=0 : NEXT I
  70. 7020  GOOD=TRUE:NUMPAR = 0
  71. 7040  A=VAL(P$(1)):IF A<= 0 OR A>1E+07 THEN GOOD= FALSE: PARERR(1)=1 :GOTO 7072
  72. 7060  PARSET(1)=1:NUMPAR= NUMPAR+1
  73. 7072  FBALL=VAL(FBALL$) :IF FBALL<0 OR FBALL>1E+07 THEN FBALL=0
  74. 7080  ANINT= VAL(P$(2)):IF ANINT<=0 OR ANINT>99.999 THEN GOOD= FALSE : PARERR(2)=1: GOTO 7120
  75. 7100  PARSET(2)=1:NUMPAR= NUMPAR+1
  76. 7120  GOSUB 7800
  77. 7125  IF VAL(YY$)<>INT(VAL(YY$)) OR VAL(MM$)<> INT(VAL(MM$)) THEN GOOD=FALSE: PARERR(3)=1: GOTO 7160
  78. 7127  DUR= VAL(YY$)+ VAL(MM$)/12:IF DUR<=0 THEN GOOD= FALSE: PARERR(3)=1: GOTO 7160
  79. 7135  GOSUB 30050:PARSET(3)=1: NUMPAR= NUMPAR +1
  80. 7160  PFQ$= P$(4):IF ASC(PFQ$)>90 THEN PFQ$=CHR$(ASC(PFQ$)-32): P$(4)=PFQ$
  81. 7170  IF PFQ$ <> "M" AND PFQ$ <> "Q" AND PFQ$ <> "Y" THEN PFQ$="M":P$(4)="M"
  82. 7180  IF PFQ$= "M" THEN PFQ= 12  :GOTO 7200
  83. 7190  IF PFQ$= "Q" THEN PFQ= 4 ELSE PFQ = 1
  84. 7200  PARSET(4)=1: NUMPAR= NUMPAR+1
  85. 7220  P= VAL (P$(5))
  86. 7230  IF P<= 0 OR P>1E+07 THEN GOOD= FALSE: PARERR(5)=1 : GOTO 7260
  87. 7240  PARSET(5)=1: NUMPAR=NUMPAR+1
  88. 7260  IF NUMPAR<4 THEN GOOD= FALSE: PARERR(6)=1
  89. 7300  IF GOOD= TRUE THEN ER$="PARAMETERS OK                   ": GOTO 7390
  90. 7310  ER$="ERROR(S) IN PARAMETERS ":TOTER = 0
  91. 7330  FOR I=1 TO 5: IF PARERR(I)=0 THEN 7370
  92. 7350  TOTER=TOTER+1:IF I=5 THEN ER$=ER$+"/"+STR$(I-1)+" ":ELSE ER$=ER$+"/"+STR$(I)+" "
  93. 7370  NEXT I
  94. 7380  IF TOTER=1 AND PARERR(4)<>1 THEN GOOD=TRUE: GOTO 7300
  95. 7390  LOCATE 22,1:PRINT SPC(79);:LOCATE 22,1: PRINT ER$;
  96. 7430  A=FNCN(A):DUR= FNCN(DUR):P=FNCN(P)
  97. 7470  IF GOOD= FALSE THEN 7700
  98. 7480  MISS=0
  99. 7490  FOR I=1 TO 5:IF PARSET(I)=0 THEN MISS=I : P$(I)="?":GOTO 7520
  100. 7510  NEXT I
  101. 7520  IF MISS<>3 THEN N= -INT(-DUR*PFQ)
  102. 7540  R=ANINT/PFQ/100
  103. 7700  GOSUB 6000:RETURN
  104. 7800  CMPO= INSTR(P$(3),","):IF CMPO=0 THEN YY$=P$(3) : MM$="": GOTO 7850
  105. 7820  IF CMPO=1 THEN YY$="": MM$= MID$(P$(3),2,LEN(P$(3))-1) : GOTO 7850
  106. 7825  YY$= MID$(P$(3),1,CMPO-1):IF CMPO= 4 THEN MM$="" : GOTO 7850
  107. 7840  MM$=MID$(P$(3),CMPO+1,LEN(P$(3))-CMPO)
  108. 7850  RETURN
  109. 8000  P$(1)="      0.00":P$(2)=" 0.000":P$(3)="00,00":P$(4)="M":P$(5)="      0.00": FBALL=0:RETURN
  110. 9000  KEY(1) OFF: KEY(2) OFF: LOCATE 5,1:PRINT "Installment Loan or Mortgage :                (I/M)";:LOCATE 5,42
  111. 9040  TYPE$=INKEY$:GOSUB 5240
  112. 9050  IF TYPE$<>"I" AND TYPE$<>"M" AND TYPE$<>"i" AND TYPE$<>"m" THEN 9040
  113. 9055  IF TYPE$="i" THEN TYPE$="I" ELSE IF TYPE$="m" THEN TYPE$="M"
  114. 9060  PRINT  TYPE$;
  115. 9140  RETURN 1020
  116. 9150  LOCATE 5,1:PRINT "Installment Loan or Mortgage : ";:LOCATE 5,42: PRINT TYPE$;"   (I/M)";:RETURN
  117. 9300  PARLINE=6 : SOUND 1046.5,1 :GOSUB 30140:GOSUB 5000
  118. 9310  IF F$="" THEN 9330
  119. 9320  FBALL$=F$: GOTO 9350
  120. 9330  LOCATE F(PARLINE,1),F(PARLINE,2): PRINT TEMP$;
  121. 9350  PARLINE=1:RETURN
  122. 10000  CLS: LOCATE 2,18:PRINT "L O A N   A N A L Y Z E R  --  SPECIFICATION": LOCATE 3,18: PRINT STRING$(44,"=");: RETURN
  123. 11000  IF  TYPE$= "M" THEN 11300
  124. 11120  ON MISS GOTO 11130,11160,11190,11500,11240
  125. 11130  A=FNIA(FBALL,N,P,R): A= FNCN(A): GOTO 11500
  126. 11160  R= FNIR(A,FBALL,N,P): ANINT=100*R*PFQ:GOTO 11500
  127. 11190  N= FNIN(A,FBALL,P,R): N=FNCN(N): DUR=N:DUR= N/PFQ : DUR= FNCN(DUR):GOSUB 30050:GOTO 11500
  128. 11240  P= FNIP(A,FBALL,N,R):P= FNCN(P):GOTO 11500
  129. 11300  ON MISS GOTO 11310,11340,11380,11500,11430
  130. 11310  A= FNMA(FBALL,N,P,R):A= FNCN(A):GOTO 11500
  131. 11340  GOSUB 30300:ANINT=100*R*PFQ:GOTO 11500
  132. 11380  N= FNMN(A,FBALL,P,R):N=FNCN(N):DUR=N:DUR=DUR/PFQ : DUR= FNCN(DUR):GOTO 11500
  133. 11430  P= FNMP(A,FBALL,N,R):P= FNCN(P)
  134. 11500  IF MISS=1 THEN P$(1) = STR$(A): P$(1)=MID$(P$(1),2,LEN(P$(1))-1)
  135. 11520  IF MISS=2 THEN P$(2)= STR$(ANINT): P$(2)=MID$(P$(2),2,LEN(P$(2))-1)
  136. 11530  IF MISS=3 THEN GOSUB 30050
  137. 11540  IF MISS=4 THEN P$(4)= PFQ$
  138. 11550  IF MISS=5 THEN P$(5)= STR$(P): P$(5)= MID$(P$(5),2,LEN(P$(5))-1)
  139. 11560  PARSET(MISS)=1
  140. 11700  RETURN
  141. 12000  KEY(1) OFF:KEY(2) OFF:KEY(6) OFF:LOCATE 19,75 :PRINT " ";:IF GOOD=FALSE OR MISS=0 THEN RETURN 1200
  142. 12030  GOSUB 11000:GOSUB 6000:LOCATE 23,1:CONS=0
  143. 12060  PRINT "Detailed Payback Schedule  (Y/N) ? ";
  144. 12070  GOSUB 5240:T$=INKEY$:IF T$="" GOTO 12070
  145. 12085  IF ASC(T$)>90 THEN T$=CHR$(ASC(T$)-32)
  146. 12090  IF T$<>"N" AND T$<>"Y" THEN 12070 ELSE PRINT T$;
  147. 12091  IF T$="N" THEN LOCATE 23,1:PRINT SPC(79);:RETURN 1200
  148. 12092  IF N/PFQ<=60 THEN 12098
  149. 12093  LOCATE 23,1:PRINT "Too many periods, ...hit a key        ";
  150. 12095  T$=INKEY$:IF T$="" THEN 12095
  151. 12096  LOCATE 23,1:PRINT SPC(79);:RETURN 1200
  152. 12098  IF PFQ=1 THEN 12120
  153. 12099  IF N<=60 THEN 12120
  154. 12100  CONS=1
  155. 12120  IF TYPE$="M" THEN GOSUB 15400 ELSE GOSUB 19000
  156. 12125  IF TYPE$="I" THEN ERASE PTABLE1 ELSE ERASE PTABLE2
  157. 12130  CLS: GOSUB 10000: GOSUB 9150:GOSUB 6000:RETURN 1200
  158. 13000  KEY(1) OFF:KEY(2) OFF:KEY(6) OFF:LOCATE 19,75:PRINT " ";:GOSUB 10000:GOSUB 9000:RETURN 1030
  159. 13050  KEY(3) OFF:KEY(4) OFF:KEY(5) OFF:KEY(7) OFF:IF (I=TABLESIZE AND TYPE$="M") THEN RETURN 15630 ELSE IF I=TABLESIZE  THEN RETURN 19152
  160. 13070  IF TYPE$="M" THEN RETURN 15640 ELSE RETURN 19160
  161. 13080  KEY(3) OFF:KEY(4) OFF:KEY(5) OFF:KEY(7) OFF:IF (I<=12 AND TYPE$="M") THEN RETURN 15630 ELSE IF I<=12 THEN RETURN 19152
  162. 13100  GOSUB 30000
  163. 13120  IF TYPE$ = "M" THEN RETURN 15640 ELSE RETURN 19160
  164. 13140  KEY(3) OFF:KEY(4) OFF:KEY(5) OFF:KEY(7) OFF:RETURN 12125
  165. 13170  KEY(1) OFF:KEY(2) OFF:KEY(6) OFF:CLS
  166. 13180  KEY 1,"LIST ":KEY 2,"RUN"+CHR$(13): KEY 3,"LOAD"+CHR$(34): KEY 4,"SAVE"+CHR$(34): KEY 5,"CONT"+CHR$(13): KEY 6,"RUN"+CHR$(34)+"MENU.BAT"+CHR$(13):KEY 7,"TRON"+CHR$(13): KEY 8,"TROFF"+CHR$(13): KEY 9,"KEY ": KEY 10,"SCREEN 0,0,0"+CHR$(13): KEY ON: E
  167. 13200  KEY(3) OFF:KEY(4) OFF:KEY(5) OFF:KEY(7) OFF:IF TYPE$="I" THEN GOSUB 25000:RETURN 19140
  168. 13230  GOSUB 26000 : RETURN 15615
  169. 14000  CLS: LOCATE 1,12: PRINT "L O A N   A N A L Y Z E R  --  MORTGAGE PAYBACK SCHEDULE";: LOCATE 2,12:PRINT STRING$(56,"=")
  170. 14510  LOCATE 4,16: PRINT "Amount:  $ ";: PRINT USING "#######.##";A;:LOCATE 5,2 : PRINT "Final Balloon Payment: $ ";: PRINT USING "#######.##";FBALL;
  171. 14520  LOCATE 6,5 : PRINT "Payment per Period: $ ";: PRINT USING "#######.##";P;:LOCATE 4,44 : PRINT "Annual Interest Rate: ";: PRINT USING "##.###";ANINT;: LOCATE 4,74: PRINT "%";
  172. 14530  LOCATE 5,43 : PRINT "Duration of Borrowing: ";P$(3);: LOCATE 5,74: PRINT "YY,MM";:LOCATE 6,47: PRINT "Payment Frequency: ";
  173. 14536  IF PFQ$="Y" THEN PRINT "Yearly"; : GOTO 14600
  174. 14537  IF PFQ$="Q" THEN PRINT "Quarterly";: GOTO 14600
  175. 14538  PRINT "Monthly";
  176. 14600  LOCATE 8,8
  177. 14700  PRINT "   |   Current   |   Current   |    Cumul.   |    Cumul.   |   Unpaid"
  178. 14800  REM
  179. 14810  IF PFQ$="Y" OR CONS=1 THEN PD$="Year    ": GOTO 14840
  180. 14820  IF PFQ$="Q" THEN PD$="Quarter ": GOTO 14840
  181. 14830  PD$="Month   "
  182. 14840  LOCATE 9,3 : PRINT PD$;
  183. 14890  LOCATE 9,11
  184. 14900  PRINT "|  Principal  |   Interest  |  Principal  |   Interest  |  Principal"
  185. 15000  LOCATE 10, 3: PRINT STRING$(76,"_"):RETURN
  186. 15400   GOSUB 14000: GOSUB 17000:IF CONS=1 THEN LOCATE 7,21: PRINT "Periods represent annual consolidation";
  187. 15450  FOR I= 1 TO TABLESIZE
  188. 15480  LOCATE 11+(I-1) MOD 12,5: PRINT I;: LOCATE 11+(I-1) MOD 12,11: PRINT "|";
  189. 15500  LOCATE 11+(I-1) MOD 12,13: IF I= TABLESIZE THEN TABLE2(I,1)=A-FBALL-TABLE2(I-1,3)
  190. 15510  PRINT USING "#######.##";TABLE2(I,1);:LOCATE 11+ (I-1) MOD 12,25: PRINT "|";:LOCATE 11+(I-1) MOD 12,27
  191. 15525  IF I=TABLESIZE THEN TABLE2(I,2)=N*P-A+FBALL-TABLE2(I-1,4)
  192. 15530  PRINT USING "#######.##";TABLE2(I,2);:LOCATE 11+(I-1) MOD 12,39: PRINT "|";:LOCATE 11+(I-1) MOD 12 ,41
  193. 15565  IF I=TABLESIZE THEN TABLE2(I,3)=A-FBALL
  194. 15570   PRINT USING "#######.##"; TABLE2(I,3);:LOCATE 11+(I-1) MOD 12,53: PRINT "|";: LOCATE 11+(I-1) MOD 12,55:IF I=TABLESIZE THEN TABLE2(I,4)=TABLE2(I-1,4)+TABLE2(I,2)
  195. 15575  PRINT USING "#######.##";TABLE2(I,4);
  196. 15601  LOCATE 11+(I-1) MOD 12,67: PRINT "|";
  197. 15602  LOCATE 11+(I-1) MOD 12,69
  198. 15603  IF I=TABLESIZE THEN PRINT USING "#######.##";FBALL;:GOTO 15610
  199. 15605  PRINT USING "#######.##";TABLE2(I,5);
  200. 15610  IF I/12<>INT(I/12) THEN 15676
  201. 15615  LOCATE 23,1: PRINT "F3 - next 12 periods. F4 - previous 12 periods. PrtSc - print. F5 - return.": PRINT "F7 - detail report.";
  202. 15630  KEY(3) ON:KEY(4) ON:KEY(5) ON:KEY(7) ON
  203. 15632  FOR K=1 TO 20: NEXT K: GOTO 15632
  204. 15640  FOR K=11 TO 22: LOCATE K,1:PRINT SPC(79);:NEXT K
  205. 15676  IF I=TABLESIZE THEN 15615
  206. 15700  NEXT I
  207. 16000  DIM PTABLE1(N+1,3): CUMPRIN=0:CUMINT=0: N1=N: LIM=N/PFQ:  A1=A: T= N*(N+1)/2: LIN=0
  208. 16075  IF N/T*(N*P-A) >P THEN LIN=1
  209. 16080  FOR J= 1 TO N1
  210. 16090  IF LIN=0 THEN CURINT=(N*P-A+FBALL)*(N+1-J)/T ELSE CURINT=(N*P-A+FBALL)/N
  211. 16120  CURPRIN=P-CURINT:CUMPRIN=CUMPRIN+CURPRIN:CUMINT=CUMINT+CURINT:CURPRIN=FNCN(CURPRIN):CURINT=FNCN(CURINT):CUMPRIN=FNCN(CUMPRIN):CUMINT=FNCN(CUMINT):PAYOFF=A+FBALL-CUMPRIN:PAYOFF=FNCN(PAYOFF)
  212. 16265  IF CONS<>1 THEN 16400
  213. 16270  IF J/PFQ<>INT(J/PFQ) AND J/PFQ<LIM  THEN 16450
  214. 16275  TABLE1(J/PFQ,1)=CUMPRIN: TABLE1(J/PFQ,2)=CUMINT:TABLE1(J/PFQ,3)=PAYOFF:GOTO 16450
  215. 16400  TABLE1(J,1)= CUMPRIN:TABLE1(J,2)= CUMINT: TABLE1(J,3)= PAYOFF
  216. 16450  PTABLE1(J,1)= CUMPRIN :PTABLE1(J,2)= CUMINT: PTABLE1(J,3)= PAYOFF
  217. 16500  NEXT J
  218. 16520  IF CONS=0 THEN TABLESIZE=N: GOTO 16535
  219. 16530  IF LIM<>INT(LIM) THEN TABLESIZE=INT(LIM+1) ELSE TABLESIZE=LIM
  220. 16535  IF TABLESIZE<>INT(TABLESIZE) THEN TABLESIZE=INT(TABLESIZE+1)
  221. 16540  PTABLESIZE=N
  222. 16545  IF PTABLESIZE<>INT(PTABLESIZE) THEN PTABLESIZE=INT(PTABLESIZE+1)
  223. 16700  RETURN
  224. 17000   DIM PTABLE2(N+1,5): CUMPRIN= 0: CUMINT= 0: A1=A:N1=N : LIM =N/PFQ: T=0
  225. 17030  FOR J= 1 TO N
  226. 17050  CURINT=A1*R: CURPRIN= P- CURINT:CUMPRIN=CUMPRIN+ CURPRIN: CUMINT=CUMINT+CURINT: A1=A1-CURPRIN: CURPRIN= FNCN(CURPRIN): CURINT=FNCN(CURINT):CUMPRIN=FNCN(CUMPRIN): CUMINT=FNCN(CUMINT)
  227. 17210  IF CONS<>1 THEN 17300
  228. 17220  IF J/PFQ<>INT(J/PFQ) AND J/PFQ<LIM THEN   17350
  229. 17222  T=T+1: TABLE2(J/PFQ,1)=CUMPRIN- TABLE2(T-1,3):TABLE2(J/PFQ,2)=CUMINT-TABLE2(T-1,4): TABLE2(J/PFQ,3)=CUMPRIN: TABLE2(J/PFQ,4)=CUMINT:TABLE2(J/PFQ,5)= A- CUMPRIN: GOTO 17350
  230. 17300  TABLE2(J,1)= CURPRIN: TABLE2(J,2)= CURINT:TABLE2(J,3)= CUMPRIN:TABLE2(J,4)= CUMINT: TABLE2(J,5)=A- CUMPRIN
  231. 17350  PTABLE2(J,1)=CURPRIN: PTABLE2(J,2)=CURINT: PTABLE2(J,3)= CUMPRIN:PTABLE2(J,4)= CUMINT: PTABLE2(J,5)=A- CUMPRIN
  232. 17500  NEXT J
  233. 17510  IF CONS=0 THEN TABLESIZE=N: GOTO 17525
  234. 17520  IF LIM<>INT(LIM) THEN TABLESIZE=INT(LIM+1) ELSE TABLESIZE=LIM
  235. 17525  IF TABLESIZE<>INT(TABLESIZE) THEN TABLESIZE=INT(TABLESIZE+1)
  236. 17530  PTABLESIZE=N
  237. 17540  IF PTABLESIZE<>INT(PTABLESIZE) THEN PTABLESIZE=INT(PTABLESIZE+1)
  238. 17600  RETURN
  239. 18000  CLS: LOCATE 1,9:PRINT "L O A N   A N A L Y Z E R  --  INSTALLMENT LOAN PAYBACK SCHEDULE";:LOCATE 2,9:PRINT STRING$(64,"=");
  240. 18060  LOCATE 4,17 : PRINT "Amount: $ ";: PRINT USING "#######.##";A;:LOCATE 5,2 : PRINT "Final Balloon Payment: $ ";: PRINT USING "#######.##";FBALL;
  241. 18080  LOCATE 6,5 : PRINT "Payment per Period: $ ";: PRINT USING "#######.##";P;:LOCATE 4,45: PRINT "Annual Interest Rate: ";:PRINT USING "##.###";ANINT;: LOCATE 4,74 : PRINT "%";
  242. 18100  LOCATE 5,44 : PRINT "Duration of Borrowing: ";P$(3);: LOCATE 5,74: PRINT "YY,MM";: LOCATE 6,48: PRINT "Payment Frequency: ";
  243. 18111  IF PFQ$="Y" THEN PRINT "Yearly";: GOTO 18120
  244. 18112  IF PFQ$="Q" THEN PRINT "Quarterly";: GOTO 18120
  245. 18113  PRINT "Monthly";
  246. 18120  LOCATE 8,17
  247. 18130  PRINT "   |    Cumul.   |    Cumul.   |   Pay-Off    ";
  248. 18131  IF PFQ$="Y" OR CONS=1 THEN PD$="Year    ": GOTO 18137
  249. 18132  IF PFQ$="Q" THEN PD$="Quarter ": GOTO 18137
  250. 18133  PD$="Month   "
  251. 18137  LOCATE 9,12
  252. 18138  PRINT PD$;
  253. 18140  LOCATE 9,20
  254. 18150  PRINT "|  Principal  |   Interest  |   Amount     ";: LOCATE 10,11
  255. 18170  PRINT "--------------------------------------------------";: RETURN
  256. 19000  GOSUB 18000: GOSUB 16000
  257. 19027  IF CONS=1 THEN LOCATE 7,20: PRINT "Periods represent annual consolidation";
  258. 19028  IF LIN=1 THEN LOCATE 7,60: PRINT "  ( Linear Decline )";
  259. 19030  FOR I=1 TO TABLESIZE
  260. 19040  LOCATE 11+(I-1) MOD 12,13: PRINT I;: LOCATE 11+(I-1) MOD 12,20 : PRINT "|";
  261. 19060  LOCATE 11+(I-1) MOD 12,22: IF I=TABLESIZE THEN TABLE1(I,1)=A-FBALL
  262. 19070  PRINT USING "#######.##";TABLE1(I,1);
  263. 19080  LOCATE 11+(I-1) MOD 12,34 : PRINT "|";: LOCATE 11+(I-1) MOD 12,36
  264. 19095  IF I=TABLESIZE THEN TABLE1(I,2)=P*N-A+FBALL
  265. 19100  PRINT USING "#######.##";TABLE1(I,2);: LOCATE 11+(I-1) MOD 12,48 : PRINT "|";
  266. 19120  LOCATE 11+(I-1) MOD 12,50:IF I=TABLESIZE THEN PRINT USING "#######.##";FBALL:GOTO 19135
  267. 19130  PRINT USING "#######.##";TABLE1(I,3);
  268. 19135  IF I/12<>INT(I/12) THEN 19195
  269. 19140  LOCATE 23,1:PRINT "F3 - next 12 periods. F4 - previous 12 periods. PrtSc - print. F5 - return.":PRINT "F7 - detail report.";
  270. 19152  KEY(3) ON:KEY(4) ON:KEY(5) ON:KEY(7) ON
  271. 19153  FOR K=1 TO 20: NEXT K: GOTO 19153
  272. 19160  FOR K=11 TO 22: LOCATE K,1: PRINT SPC(79);: NEXT K
  273. 19195  IF I=TABLESIZE THEN 19140
  274. 19700  NEXT I
  275. 20000  LPRINT  CHR$(12);:LPRINT "         L O A N   A N A L Y Z E R  --  INSTALLMENT LOAN PAYBACK SCHEDULE"
  276. 20030  LPRINT "         ";STRING$(64,"="): LPRINT:LPRINT: RETURN
  277. 20060  LPRINT CHR$(12);: LPRINT SPC(12);"L O A N   A N A L Y Z E R  --  MORTGAGE PAYBACK SCHEDULE"
  278. 20080  LPRINT SPC(12);STRING$(56,"="):LPRINT:LPRINT:RETURN
  279. 20090  LPRINT SPC(17);"Amount: $ ";: LPRINT USING "#######.##";A;
  280. 20100  LPRINT SPC(9);"Annual Interest Rate: ";: LPRINT USING "##.###";ANINT;: LPRINT " %":LPRINT SPC(2);"Final Balloon Payment: $ ";: LPRINT USING "#######.##";FBALL;
  281. 20120  LPRINT SPC(8);"Duration of Borrowing: ";: LPRINT P$(3);" ";"YY,MM":LPRINT SPC(5);"Payment per Period: $ ";:LPRINT USING "#######.##";P;:LPRINT SPC(12);"Payment Frequency: ";
  282. 20141  IF PFQ$="Y" THEN LPRINT "Yearly": GOTO 20145
  283. 20142  IF PFQ$="Q" THEN LPRINT "Quarterly": GOTO 20145
  284. 20143  LPRINT "Monthly"
  285. 20145  IF TYPE$="I" AND LIN=1 THEN LPRINT SPC(33);"(Linear Decline)": GOTO 20160
  286. 20150  LPRINT
  287. 20160  LPRINT
  288. 20165  RETURN
  289. 20170  LPRINT SPC(22);"   |    Cumul.   |    Cumul.   |   Pay-Off    "
  290. 20190  IF PFQ$="Y" THEN PD$="Year    ": GOTO 20230
  291. 20200  IF PFQ$="Q" THEN PD$="Quarter ": GOTO 20230
  292. 20210  PD$="Month   "
  293. 20230  LPRINT SPC(17);PD$;
  294. 20240  LPRINT "|  Principal  |   Interest  |   Amount     ":LPRINT SPC(16);STRING$(51,"_"): RETURN
  295. 20280  LPRINT SPC(7);"   |   Current   |   Current   |    Cumul.   |    Cumul.   |   Unpaid"
  296. 20290  IF PFQ$="Y" THEN PD$="Year    ": GOTO 20320
  297. 20300  IF PFQ$="Q" THEN PD$="Quarter ": GOTO 20320
  298. 20310  PD$="Month   "
  299. 20320  LPRINT SPC(2);PD$;
  300. 20330  LPRINT "|  Principal  |   Interest  |  Principal  |   Interest  |  Principal"
  301. 20340  LPRINT SPC(2);STRING$(76,"_"): RETURN
  302. 25000  GOSUB 20000: GOSUB 20090: GOSUB 20170
  303. 25100  FOR K=1 TO PTABLESIZE
  304. 25110  LPRINT SPC(18);: LPRINT USING "####";K;: LPRINT SPC(3);"|";: LPRINT " ";
  305. 25140  IF K= PTABLESIZE THEN PTABLE1(K,1)=A-FBALL
  306. 25150  LPRINT USING "#######.##";PTABLE1(K,1);: LPRINT SPC(2);"|";:LPRINT " ";
  307. 25180  IF K=PTABLESIZE THEN PTABLE1(K,2)=P*N-A+FBALL
  308. 25190  LPRINT USING "#######.##";PTABLE1(K,2);:LPRINT  SPC(2);"|";: LPRINT " ";
  309. 25220  IF K=PTABLESIZE THEN LPRINT USING "#######.##";FBALL:GOTO 25240
  310. 25230  LPRINT USING "#######.##";PTABLE1(K,3)
  311. 25240  IF K/48<>INT(K/48) THEN 25260
  312. 25245  IF K=N THEN 25260
  313. 25250  LPRINT CHR$(12); : LPRINT :LPRINT :LPRINT : GOSUB 20170
  314. 25260  NEXT K
  315. 25999  RETURN
  316. 26000  GOSUB 20060:GOSUB 20090:GOSUB 20280
  317. 26050  FOR K=1 TO PTABLESIZE
  318. 26060  LPRINT SPC(3);: LPRINT USING "####";K;:LPRINT SPC(3);: LPRINT "|";:LPRINT " ";
  319. 26110  IF K=PTABLESIZE THEN PTABLE2(K,1)=A-FBALL-PTABLE2(K-1,3)
  320. 26120  LPRINT USING "#######.##";PTABLE2(K,1);: LPRINT SPC(2);"|";:LPRINT " ";
  321. 26150  IF K=PTABLESIZE THEN PTABLE2(K,2)=N*P-A+FBALL-PTABLE2(K-1,4)
  322. 26160  LPRINT  USING "#######.##";PTABLE2(K,2);: LPRINT  SPC(2);"|";: LPRINT " ";
  323. 26190  IF K=PTABLESIZE THEN PTABLE2(K,3)=A-FBALL
  324. 26200  LPRINT USING "#######.##";PTABLE2(K,3);:LPRINT  SPC(2);"|";:LPRINT  " ";
  325. 26230  IF K=PTABLESIZE THEN PTABLE2(K,4)= PTABLE2(K-1,4)+ PTABLE2(K,2)
  326. 26240  LPRINT USING "#######.##";PTABLE2(K,4);:LPRINT SPC(2);"|";
  327. 26255  IF K=PTABLESIZE THEN LPRINT USING "#######.##";FBALL:GOTO 26270
  328. 26260  LPRINT USING "#######.##";PTABLE2(K,5)
  329. 26270  IF K/48<>INT(K/48) THEN 26500
  330. 26275  IF K=N THEN 26500
  331. 26280  LPRINT CHR$(12): LPRINT : LPRINT :LPRINT :GOSUB 20280
  332. 26500  NEXT K
  333. 26999  RETURN
  334. 30000  IF I<=12 THEN RETURN
  335. 30020  IF I/12<> INT(I/12) THEN I= INT(I/12)*12-12: GOTO 30040
  336. 30030  I=I-24
  337. 30040  RETURN
  338. 30050  YY$=STR$(INT(DUR)): MM$=STR$(CINT((DUR-INT(DUR))*12)):YY$=MID$(YY$,2,LEN(YY$)): MM$=MID$(MM$,2,LEN(MM$))
  339. 30100  IF LEN(YY$)<2 THEN YY$="0"+YY$
  340. 30110  IF LEN(MM$)<2 THEN MM$="0"+MM$
  341. 30120  P$(3)=YY$++"," +MM$
  342. 30130  RETURN
  343. 30140  X=F(PARLINE,2): Y=F(PARLINE,1): FL=F(PARLINE,3): TEMP$=""
  344. 30160  FOR K=X TO X+FL-1
  345. 30170  TEMP$=TEMP$+CHR$(SCREEN(Y,K))
  346. 30180  NEXT K
  347. 30190  RETURN
  348. 30200  DEF FNCN(X)=FIX(100*X+0.5)/100
  349. 30210  DEF FNMAN(B,N,P,R) = P+ (B*R*(1+R)^N) / ((1+R)^N-1) -R*B: DEF FNMAD(B,N,P,R) = R*(1+R)^N / ((1+R)^N-1) : DEF FNMA(B,N,P,R)= FNMAN(B,N,P,R)/ FNMAD(B,N,P,R)
  350. 30260  REM  NEWTON ROUTINE
  351. 30270  DEF FNF(S)=A*S^(N+1)-(A+P)*S^N-FBALL*S+FBALL+P: DEF FNG(S)=A*(N+1)*S^N-(A+P)*N*S^(N-1)-FBALL
  352. 30290  GOTO 30340
  353. 30300  S=1.1
  354. 30310  IF FNF(S)<=0.01 THEN R= S-1 : RETURN
  355. 30320  S=S- FNF(S)/FNG(S)
  356. 30330  GOTO 30310
  357. 30340  DEF FNMN(A,B,P,R) = LOG( R*(A-B)/(P-R*B-R*(A-B)) +1)/ LOG (1+R): DEF FNMP(A,B,N,R) = (A-B)*R*(1+R)^N/ ((1+R)^N-1)+R*B
  358. 30390  DEF FNIA(B,N,P,R)= (P*N+B)/(1+R*N):DEF FNIR(A,B,N,P)= (P*N+B-A)/(N*A): DEF FNIN(A,B,P,R)= (A-B)/(P-R*A): DEF FNIP(A,B,N,R)= (A-B+R*N*A)/N
  359. 30430  RETURN
  360. 40000  CHAIN "MENU.BAT"
  361. 40010  LOCATE 24,25: PRINT "Printer problem, please check , hit a key to re-try";
  362. 40020  T$=INKEY$: IF T$="" THEN 40020
  363. 40030  LOCATE 24,25: PRINT SPC(52);: RESUME
  364.